package Demo1;

/**
 * Description:
 * Date: 2025-10-11
 * Time: 13:45
 */
public class Test {
    public static void main1(String[] args) {
        Dog dog = new Dog();
        //此时Dog中虽然没有成员变量name和age，但是当需要时可以从父类中拿
        dog.name = "大黄";
        dog.age = 11;
        dog.eat();
        dog.bark();

        System.out.println("================");
        Cat cat = new Cat();
        cat.name = "小白";
        cat.age = 11;
        cat.eat();
        cat.mimi();
    }

    public static void main2(String[] args) {
        Bird bird = new Bird();
        System.out.println(bird.a);
        System.out.println(bird.b);
        //此时的c就是当访问到它时，子类中没用，就从父类中拿
        System.out.println(bird.c);
    }

    public static void main3(String[] args) {
        Bird bird = new Bird();
        //如果当子类和父类中同时拥有相同的变量，当访问这个变量时，会优先使用子类的变量
        //即遵循一个大原则：就近原则
        System.out.println(bird.a);
        System.out.println(bird.b);
    }

    public static void main4(String[] args) {
        Bird bird = new Bird();
        bird.getNum();

        //父类和子类中的成员方法构成了方法重载
        bird.testA();
        bird.testA('c');
    }

    public static void main5(String[] args) {
        Dog dog = new Dog();
        System.out.println(dog.name);

        Dog dog1 = new Dog("大黄",15);
        System.out.println(dog1.name);
        System.out.println(dog1.age);

    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        //子类和父类当中的代码块的执行顺序
        /*
        //1.静态的是属于类的，只会在类加载时执行一次，优先级最高
        //若想执行子类的，得先满足父类的初始化
        父类的静态代码块...
        子类的静态代码块...
        2.然后先执行父类的实例和构造，再执行子类的实例和构造
        父类的实例代码块...
        父类的构造方法...
        子类的实例代码块...
        子类的构造代码块...*/
    }





}
